﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Clinica_Frba
{
    public partial class MenuPrincipal : Form
    {
        Utility util = Utility.getInstance();
        Conexion sqlCon;
        SortedDictionary<int,System.EventHandler> collFunc = new SortedDictionary<int,System.EventHandler>();
        private System.Windows.Forms.ToolStripMenuItem menuItem;
        int cantItems;

        public MenuPrincipal()
        {
            InitializeComponent();
            initFuncionalidadColl();
        }

        private void initFuncionalidadColl() 
        {
            collFunc.Add(1, new System.EventHandler(menuItemAbmRol_Click));
            collFunc.Add(2, new System.EventHandler(menuItemAbmAfiliado_Click));
            collFunc.Add(3, new System.EventHandler(menuItemAbmProfesional_Click));
            collFunc.Add(4, new System.EventHandler(menuItemRegistrarAgenda_Click));
            collFunc.Add(5, new System.EventHandler(menuItemComprarBono_Click));
            collFunc.Add(6, new System.EventHandler(menuItemPedirTurno_Click));
            collFunc.Add(7, new System.EventHandler(menuItemRegistroLlegada_Click));
            collFunc.Add(8, new System.EventHandler(menuItemRegistroResAtencion_Click));
            collFunc.Add(9, new System.EventHandler(menuItemCancAtencion_Click));
            collFunc.Add(10, new System.EventHandler(menuItemListEstadistico_Click));
        }

        private void MenuPrincipal_Load(object sender, EventArgs e)
        {   //Cargar archivo de configuracion
            util.loadConfig();

            //Verificar conexion con SQL server
            sqlCon = Conexion.getInstance();

            if (!sqlCon.isConnected())
            {
                MessageBox.Show("No se pudo establecer la conexion con el servidor," +
                                "por favor contacte al administrador del sistema", "Error");
                Application.Exit();
            }
        }

        private void loginToolStripMenuItem_Click(object sender, EventArgs e)
        {
            LoginForm loginF = new LoginForm();
            SeleccionarRol rol = new SeleccionarRol();

            loginF.ShowDialog();

            if (util.isLoggedIn())
            {    
                if (rol.initUserRoles(util.getUserName()) > 1)
                    rol.ShowDialog();

                addMenuItemsUserRol(util.getIdRol());

                this.loginToolStripMenuItem.Visible = false;
            }
        }

        private void addMenuItemsUserRol(int rol)
        {
            SqlDataReader reader;
            //Leer las funcionalidades asignadas al rol del usuario
            reader = sqlCon.execQuery("SELECT rol.id_Funcionalidad, Nombre" +
                                      " FROM b_sharp.Rol_Funcionalidad rol" +
                                      " JOIN b_sharp.Funcionalidad func ON rol.id_Funcionalidad = func.id_Funcionalidad" +
                                      " WHERE id_Rol = '" + rol + "';");
            while (reader.Read())
            {   //Agregar las funcionalidades al menu
                this.menuItem = new System.Windows.Forms.ToolStripMenuItem();

                this.menuItem.Name = Convert.ToString(reader.GetInt32(0));
                this.menuItem.Size = new System.Drawing.Size(213, 22);
                this.menuItem.Text = reader.GetString(1);
                this.menuItem.Click += collFunc[reader.GetInt32(0)];

                this.meToolStripMenuItem.DropDownItems.Add(this.menuItem);

                cantItems++;
            }

            //Add Item Cerrar Sesion
            this.menuItem = new System.Windows.Forms.ToolStripMenuItem();

            this.menuItem.Name = "CerrarSesion";
            this.menuItem.Size = new System.Drawing.Size(213, 22);
            this.menuItem.Text = "Cerrar Sesion";
            this.menuItem.Click += new System.EventHandler(this.menuItemCerrarSesion_Click);

            this.meToolStripMenuItem.DropDownItems.Add(this.menuItem);
            cantItems++;
        }

        private void menuItemAbmAfiliado_Click(object sender, EventArgs e)
        {
            ABMForm ABMf = new ABMForm(new ManejadorAfiliado());
             
            ABMf.Show();
        }

        private void menuItemAbmProfesional_Click(object sender, EventArgs e)
        {
            ABMForm ABMProf = new ABMForm(new ManejadorProf());

            ABMProf.Show();
        }

        private void menuItemAbmRol_Click(object sender, EventArgs e)
        {
            ABMForm ABMRol = new ABMForm(new ManejadorRol());
            ABMRol.Show();
        }

        private void menuItemCancAtencion_Click(object sender, EventArgs e)
        {
            DecisionCancelar cancelAtencion = new DecisionCancelar();

            cancelAtencion.showCancelarForm();
        }

        private void menuItemComprarBono_Click(object sender, EventArgs e)
        {
            CompraBono Compra = new CompraBono();
            try
            {
                Compra.Show();
            }
            catch
            {
                MessageBox.Show("Error. Intente nuevamente.");
            }
        }

        private void menuItemGenerarReceta_Click(object sender, EventArgs e)
        {

        }

        private void menuItemListEstadistico_Click(object sender, EventArgs e)
        {
            ListPrinc nuevoEstad = new ListPrinc();
            nuevoEstad.Show();
        }

        private void menuItemPedirTurno_Click(object sender, EventArgs e)
        {
            TurnoForm pedirTurno = new TurnoForm();

            pedirTurno.Show();
        }

        private void menuItemRegistrarAgenda_Click(object sender, EventArgs e)
        {
            ABMForm ABMRegistrarAgenda = new ABMForm(new ManejadorAgenda());
            Point punto2 = ABMRegistrarAgenda.Modificacion.Location;
            int altura = 213;
            int ancho = 203;
            Size tamaño = ABMRegistrarAgenda.Size;
            tamaño.Height = altura;
            tamaño.Width = ancho;
            
            ABMRegistrarAgenda.Modificacion.Hide();
            ABMRegistrarAgenda.Buscar.Location = punto2;
            ABMRegistrarAgenda.Size = tamaño; 
            ABMRegistrarAgenda.Show();
        }

        private void menuItemRegistroLlegada_Click(object sender, EventArgs e)
        {
            RegLleg regL = new RegLleg();
            regL.Show();
        }

        private void menuItemRegistroResAtencion_Click(object sender, EventArgs e)
        {
            RegAten regA = new RegAten();
            regA.Show();

        }

        private void menuItemCerrarSesion_Click(object sender, EventArgs e)
        {
            this.loginToolStripMenuItem.Visible = true;

            for (int i = 1; cantItems != 0; --cantItems)
            {
                this.meToolStripMenuItem.DropDownItems.RemoveAt(i);
            }

            util.setLogin(false);
        }
    }
}
